package com.aipartner.service;

import com.aipartner.common.PageResult;
import com.aipartner.entity.UserTask;
import com.aipartner.entity.WalletTransaction;

import java.math.BigDecimal;
import java.util.Map;

/**
 * Personal Service Interface
 * 
 * @author AI Partner Team
 * @since 2024-01-20
 */
public interface PersonalService {
    
    /**
     * Get user profile statistics
     * 
     * @param userId User ID
     * @return User statistics
     */
    Map<String, Object> getUserStats(Long userId);
    
    /**
     * Get user favorites
     * 
     * @param userId User ID
     * @param contentType Content type filter
     * @param current Current page
     * @param size Page size
     * @return User favorites
     */
    PageResult<Map<String, Object>> getUserFavorites(Long userId, String contentType, Long current, Long size);
    
    /**
     * Add to favorites
     * 
     * @param userId User ID
     * @param contentType Content type
     * @param contentId Content ID
     * @param title Title
     * @param content Content description
     * @param imageUrl Image URL
     * @param contentData Additional content data
     * @return Whether addition was successful
     */
    boolean addToFavorites(Long userId, String contentType, String contentId, String title, String content, String imageUrl, String contentData);
    
    /**
     * Remove from favorites by favorite ID
     * 
     * @param userId User ID
     * @param favoriteId Favorite ID
     * @return Whether removal was successful
     */
    boolean removeFromFavorites(Long userId, Long favoriteId);
    
    /**
     * Remove from favorites by content
     * 
     * @param userId User ID
     * @param contentType Content type
     * @param contentId Content ID
     * @return Whether removal was successful
     */
    boolean removeFromFavoritesByContent(Long userId, String contentType, String contentId);
    
    /**
     * Get user tasks
     * 
     * @param userId User ID
     * @param status Task status
     * @return User tasks
     */
    PageResult<UserTask> getUserTasks(Long userId, Integer status, Long current, Long size);
    
    /**
     * Complete user task
     * 
     * @param userId User ID
     * @param taskId Task ID
     * @return Whether completion was successful
     */
    boolean completeUserTask(Long userId, Long taskId);
    
    /**
     * Get wallet balance
     * 
     * @param userId User ID
     * @return Wallet balance
     */
    BigDecimal getWalletBalance(Long userId);
    
    /**
     * Get wallet transactions
     * 
     * @param userId User ID
     * @param current Current page
     * @param size Page size
     * @return Wallet transactions
     */
    PageResult<WalletTransaction> getWalletTransactions(Long userId, Long current, Long size);
}